package com.youlu.campus.entity;

import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.index.Indexed;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Getter
@Setter
public class OOrderInfoComparable implements Comparable<OOrderInfoComparable> {
    @Id
    private String id;

    /**
     * 是否删除
     */
    @Indexed
    private Boolean deleted = false;

    /**
     * 创建时间
     */
    @Indexed
    @CreatedDate
    private Date createdTime;

    /**
     * 最后更新时间
     */
    @LastModifiedDate
    private Date updatedTime;

    /**
     * 创建人ID
     */
    private String creatorId;
    /**
     * 租户ID
     */
    private String tenantId;
    /**
     * 租户名字
     */
    private String tenantName;

    private Date deletedTime;
    /**
     * appId
     */
    protected String appId;
    /**
     * 平台
     */
    protected String platform;
    /**
     * 用户openId QQ微信h5支付 才会返回
     */
    protected String openId;
    /**
     * 活动ID
     */
    private String activityId;
    /**
     * 用户账号信息
     */
    @Indexed
    private String accountInfoId;
    /**
     * 主订单号
     */
    @Indexed
    protected String orderNo;
    /**
     * 子订单号
     */
    @Indexed
    protected String oOrderNo;
    /**
     * 商品ID
     */
    protected String itemInfoId;
    /**
     * 商品类型,ca:证书,item:普通商品
     */
    protected String itemType;

    /**
     * 购买数量
     */
    protected Integer num = 1;

    /**
     * 总价 分
     */
    protected Integer totalFee;

    /**
     * 支付价格 分
     */
    protected Integer payPrice;

    /**
     * 支付状态 ,"1":成功
     */
    protected String payStatus;

    /**
     * 支付方式 默认QQ钱包
     */
    protected String payType;

    /**
     * 支付时间
     */
    protected Date payTime;

    /**
     * 取消时间
     */
    protected Date cancelTime;


    /**
     * 支付回调交易ID
     */
    protected String transactionId;

    /**
     * 客户端ID
     */
    protected String clientIp;

    /**
     * 快递单号
     */
    protected String expressNo;

    /**
     * 邮箱地址
     */
    protected String email;

    /**
     * 订单备注
     */
    protected String remark;
    /**
     * 邮费,单位分
     */
    protected String expressFee;
    /**
     * 订单主图
     */
    protected String imageUrl;
    /**
     * 订单备注,富文本信息
     */
    protected String comments;
    /**
     * 状态,0:待付款,1:已付款,2:制作中,3:待发货,4:待收货,5:已收货,6:订单完成,7:订单关闭,8:售后中,9:部分已发货
     */
    private String status = "";

    /**
     * 退款状态,0:未退款,1:退款申请,2:退款中,3:退款完成,4:待返货,7:部分退款中
     */
    private String refundStatus = "0";
    /**
     * 物流公司
     */
    private String logisticsCompany;
    /**
     * 物流编号
     */
    private String logisticsNo;
    /**
     * 发货方式,1:快递,2:到店自提,3:无物流
     */
    private String freightType = "1";
    /**
     * 物流公司
     */
    private String refundLogisticsCompany;
    /**
     * 物流编号
     */
    private String refundLogisticsNo;
    /**
     * 商品信息
     */
    private String itemTitle;
    /**
     * 商品图片
     */
    private String itemImageUrl;
    /**
     * 详情
     */
    private String itemDetail;
    /**
     * 原价
     */
    private Integer itemPrice;
    /**
     * 售价
     */
    private Integer salePrice;
    /**
     * 赠品信息
     */
    private String gift;
    /**
     * 退款ID,微信返回
     */
    private String refundId;
    /**
     * 审核状态
     */
    private Integer verifyStatus;
    /**
     * 等级
     */
    @Transient
    private String level;
    /**
     * 材质
     */
    @Transient
    private String edition;

    //证书编号
    private String certificateNo;

    //是否赠品 true是
    private Boolean caGift = Boolean.FALSE;
    /**
     * 订单提示语
     */
    private String tips;
    /**
     * 售后状态,0:无售后,1:补发中,2:换货中
     */
    private String postSaleStatus = "0";
    /**
     * 售后物流公司
     */
    private String postSaleLogisticsCompany;
    /**
     * 售后物流编号
     */
    private String postSaleLogisticsNo;
    /**
     * 是否超卖商品
     */
    private Boolean overbought;
    /**
     * 是否赠品,赠品对应的价格为0
     */
    private Boolean gifted = Boolean.FALSE;
    /**
     * 商品原始信息
     */
    private CaInfo caInfo;
    /**
     * 原价,扩展字段
     */
    private Integer itemPriceBack;
    /**
     * 售价,扩展字段
     */
    private Integer salePriceBack;
    /**
     * 备注
     */
    private String mark;
    /**
     * 合单批次ID
     */
    @Indexed
    private String singleOrderBatchId;
    /**
     * 合单编号
     */
    @Indexed
    private String singleNo;
    // 子合单关联订单
    @Transient
    private List<OOrderInfo> subSingleOrders = new ArrayList();

    /**
     * 合单排序好
     */
    private Integer singlePriority = 0;

    @Override
    public int compareTo(OOrderInfoComparable o) {
        return this.singlePriority.compareTo(o.getSinglePriority());
    }
}
